package cn.wjssl.domain.activity.service;

import cn.wjssl.domain.activity.model.entity.ActivityAccountEntity;
import cn.wjssl.domain.activity.model.entity.DeliveryOrderEntity;
import cn.wjssl.domain.activity.model.entity.SkuRechargeEntity;
import cn.wjssl.domain.activity.model.entity.UnpaidActivityOrderEntity;

/**
 * sku单接口
 */
public interface IRaffleActivityAccountQuotaService {

    /**
     * 创建 sku 账户充值订单，给用户增加抽奖次数
     * 在对应的 raffle_activity_order_00x中创建记录， 并给活动用户的【总,日,月】账户更新抽奖次数
     * @param skuRechargeEntity 活动商品充值实体对象
     * @return 未支付的sku单
     */
    UnpaidActivityOrderEntity createSkuRechargeOrder(SkuRechargeEntity skuRechargeEntity);

    // 获取用户 [当日] 抽奖次数, 如果没有账户就返回 0
    Integer queryRaffleActivityAccountDayPartakeCount(Long activityId, String userId);

    /**
     * 查询活动账户额度「总、月、日」
     * @param activityId 活动ID
     * @param userId     用户ID
     * @return 账户实体
     */
    ActivityAccountEntity queryActivityAccountEntity(Long activityId, String userId);

    // 查询用户 [当前总共] 抽奖次数, 如果没有账户就返回 0
    Integer queryRaffleActivityAccountTotalPartakeCount(Long activityId, String userId);

    /**
     * 根据sku单信息, 更新sku单为completed, 并根据sku单信息, 更新总账户, 月账户, 日账户
     * @param deliveryOrderEntity
     */
    void updateOrder(DeliveryOrderEntity deliveryOrderEntity);
}
